package com.x.动态代理.advice;

/**
 * ClassName: LogAdvice
 * Package: IntelliJ IDEA
 * Description:
 * Written by HanXu
 * Create 2024.09.04 16:41
 */

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.*;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

import java.sql.SQLOutput;

/**
 * 增强类：内部存储增强代码
 *
 * 1、根据插入位置写方法
 * 2、注解配置插入目标方法的位置
 *      前置: @Before
 *      后置: @AfterReturning
 *      异常: @AfterThrowing
 *      最后: @After
 *      环绕: @Around
 * 3、配置切点
 *      value = "execution(* com.x.动态代理.impl.*.*(..))"
 * 4、补全注解
 *      @Component 加入ioc容器
 *      @Aspect 配置切面
 * 5、开启注解支持
 *      在配置类中添加@EnableAspectJAutoProxy
 */

@Component
@Aspect
public class LogAdvice {

    @Before(value = "execution(* com.x.动态代理.impl.*.*(..))") //配置切点: impl目录下所有类中的所有方法
    public void startLog(){
        System.out.println("方法开始");
    }


    @After(value = "execution(* com.x.动态代理.impl.*.*(..))")
    public void endLog(){
        System.out.println("方法结束");
    }

    @AfterThrowing(value = "execution(* com.x.动态代理.impl.*.*(..))")
    public void errorLog(){
        System.out.println("方法报错");
    }
}
